/**
主要回顾：去除数组中的重复元素

分析：
    1. 确定新数组的长度： 原数组的长度 - 重复个数
    2. 创建新数组
    3. 遍历数组，把不重复的元素复制到新数组中
    4. 返回新数组
*/
import java.util.*;

class Removeduplication {
    public static void main(String[] args) {
        int[] arr = {11, 2, 4, 11, 2, 11, 4};    //新建测试数组
        int[] newArr = removeDuplication(arr);    //调用除重方法
        System.out.println(Arrays.toString(newArr));
    }
    
    public static int[] removeDuplication(int[] arr){
        int count = 0;    //记录重复元素个数
        
        //遍历数组，计算重复元素个数
        for(int i=0; i<arr.length-1; i++){
            for(int j=i+1; j<arr.length; j++){
                if (arr[i] == arr[j]) {    //如果重复，则重复个数加一
                    count++;
                    break;    //这一步是防止重复计算的关键——保证每对元素只对比一次
                }
            }
        }
        
        //计算新数组的长度，并创建新数组
        int[] result = new int[arr.length - count];
        
        int currentIndex = 0;    //记录已经复制到新数组的元素个数
        
        //遍历旧数组，并把元素复制到新数组中
        for (int i=0; i<arr.length; i++) {
            boolean duplicated = false;    //是否重复标记
            
            //遍历新数组，看看当前元素是否已经存在新数组中
            for (int j=0; j<currentIndex; j++) {
                if (result[j] == arr[i]) { //如果已经存在
                    duplicated = true;     //标记重复
                    break;                 //结束遍历（已经重复了，就不需要放到新数组了）
                }
            }
            if (!duplicated) {                 //如果遍历完了新数组也没有找到已经存在的元素
                result[currentIndex] = arr[i]; //则把该元素添加到新数组里
                currentIndex++;                //已经存新数组中的元素个数加一
            }
        }
        
        return result;    //返回新数组
    }
    
}